#include <iostream>

template <class Base> class Interface {

     public:
        virtual Base operator + (const Base& op2) = 0;
};


class MyClass : public Interface<MyClass> {
   public:
      MyClass(const int& i) : data(i) {};
	  MyClass operator + (const MyClass& op2);
/*      MyClass operator + (const MyClass& op2) {

	return MyClass(data+op2.data);

   } 
  */
   private:
      int data;

}; 

MyClass MyClass::operator + (const MyClass& op2) {

	return MyClass(data+op2.data);

}

int main(){
	MyClass c(10);
	return 0;
}
